package initPkg

import (
	"encoding/json"
	"fmt"

	"github.com/nacos-group/nacos-sdk-go/clients"
	"github.com/nacos-group/nacos-sdk-go/common/constant"
	"github.com/nacos-group/nacos-sdk-go/vo"
	"go.uber.org/zap"

	"2106a-zg5/work/day15/user_srv/global"
)

func NacosInit() {
	ViperInit()
	//Nacos 服务器的 连接配置
	sc := []constant.ServerConfig{
		{
			IpAddr: global.NacosConfig.Nacos.Host,
			Port:   uint64(global.NacosConfig.Nacos.Port),
		},
	}
	//客户端 行为配置信息
	cc := constant.ClientConfig{
		//NamespaceId: 这是客户端使用的命名空间 ID。
		NamespaceId: global.NacosConfig.Nacos.NamespaceId, // 如果需要支持多namespace，我们可以场景多个client,它们有不同的NamespaceId
		//客户端请求的超时时间，单位为毫秒。这里设置为 5000 毫秒，即 5 秒。
		TimeoutMs: 5000,
		//如果设置为 true，客户端在启动时不会加载缓存。
		NotLoadCacheAtStart: true,
		//日志文件的存储路径
		LogDir: "tmp/nacos/log",
		//缓存文件的存储路径
		CacheDir: "tmp/nacos/cache",
		//debug
		LogLevel: "debug",
	}
	//使用 clients.CreateConfigClient 方法创建一个 Nacos 配置中心的客户端
	configClient, err := clients.CreateConfigClient(map[string]interface{}{
		"serverConfigs": sc,
		"clientConfig":  cc,
	})
	if err != nil {
		zap.S().Info("创建失败！！！")
		fmt.Println(err)
	}
	//通过 服务端 来进行 与 nacos 进行服务配置信息 交流
	content, err := configClient.GetConfig(vo.ConfigParam{
		DataId: global.NacosConfig.Nacos.DataId,
		Group:  global.NacosConfig.Nacos.Group})
	if err != nil {
		zap.S().Debug(err)
	}

	json.Unmarshal([]byte(content), &global.UserConfig)

	//fmt.Println(content)

	//err = configClient.ListenConfig(vo.ConfigParam{
	//	DataId: "user-web.yaml",
	//	Group:  "dev",
	//	OnChange: func(namespace, group, dataId, data string) {
	//		fmt.Println("配置文件变化")
	//		fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data)
	//	},
	//})
	//time.Sleep(3000 * time.Second)
}
